/**************************************************************************************
*
*	Copyright (C) 2010 Brent Andrew O. Chua - See LICENSE.txt for more info.
*		
*	Filename	-	Classes.h
*
*	Description -	Forward declaration of all classes in Pulse engine.
*
*	Comments	-	There's like a hundred more classes I need to include here but i'm
*					too lazy m'kay?
*
*	Modification History:
*			Name			   Date					Description
*			CodeSushi	-	05/29/2010		-	File creation
**************************************************************************************/

#ifndef _PSX_CLASSES_H_
#define _PSX_CLASSES_H_

#include "Platform.h"

namespace Pulse
{
	// Forward class declarations
	//////////////////////////////

	// Application class
	class IApplication;
	class WindowsBaseApplication;
	class ConsoleApplication;
	class WindowApplication;

	// Pulse container classes
	template < typename T >
	class Array;
	template < typename T >
	class BinaryTree;
	template< typename K, typename T, typename Trait, typename Hash >
	class HashTable;
	template < typename T >
	class List;
	template < typename T >
	class LList;
	template < typename K, typename T, typename Trait >
	class Map;
	template < typename T, typename Trait >
	class PriorityQueue;
	template < typename T >
	class Queue;
	template < typename T, typename Trait >
	class Set;
	template < typename T, typename Trait >
	class SortedLList;
	template < typename T >
	class Stack;

	// Utility classes
	class Clock;
	class FPSCounter;
	class FPSAutoCounter;
	class Stream;
	class IStream;
	class OStream;
	class String;
	class FileIO;
	class IRegistryObject;
	class Registry;
	class RegisterClassRAII;

	// Math classes
	class Box;
	class FastFloat;
	class Math;
	class Matrix3x3;
	class Matrix4x4;
	class Random;
	class Vector2;
	class Vector3;
	class Vector4;

	// Systems/Manager classes
	class PulseScript;
	class ResHandle;
	class ResourceCache;
	class ResourceFile;
	class FileSystem;
	class ProcessManager;
	class EventManager;
	class InputSystem;
	class VertexBuffer;

	// Resource manager classes
	class IResourcePoolItem;
	template < typename T >
	class ResourcePool;
	class ResourceManager;

	// Graphics
	class Renderer;
	class RendererDevice;
	class VertexDeclaration;
	class VertexBuffer;
	class Texture;
	typedef ResourcePool< Texture > TextureManager;
	typedef ResourcePool< VertexBuffer > VertexBufferManager;
	typedef ResourcePool< VertexDeclaration > VertexDeclarationManager;
	class GraphicsResourceManager;
	class RenderStage;
	class Shader;
	class ShaderConstant;
	struct ShaderConstantType;
	class RenderPass;
	class RenderTechnique;
	class ScreenElements;
	class Sprite;
	class Material;

	// Multi-threading
	template < BOOL bTry >
	class _MutexLocker;
	typedef _MutexLocker< TRUE > MutexLocker;
	typedef _MutexLocker< FALSE > MutexTryLocker;
	class Thread;

	// Application
	class Logic;
	class View;

}

#endif /* _PSX_CLASSES_H_ */